import request from "@/services/interceptors";
import { ProFormUploadButton } from "@ant-design/pro-components";
import type { UploadFile } from "antd/es/upload/interface"; // 导入 UploadFile 类型

const MyProFormUpload = (props) => {
  const token: string | null = localStorage.getItem("token") || null;
  const uploadUrl = import.meta.env.VITE_APP_UPLOAD_URL;

  // 修改 fileClick 函数以处理下载逻辑，并接收 UploadFile 对象
  const fileClick = async (file: UploadFile) => {
    // 从 file 对象中获取文件 URL，优先使用 file.url，其次是 file.response.data
    const relativePath = file.url || file.response?.data;
    if (!relativePath) {
      console.error("无法找到文件的 URL 进行预览或下载。");
      // 可以给用户一个提示，例如使用 message.error()
      return;
    }

    try {
      const res: any = await request.sgks.fileDownloadList(
        { relativePath: relativePath },
        { format: "blob" } // 确保请求返回的是 blob 数据
      );
      // 创建 blob URL 并触发下载
      const blob = new Blob([res.data]); // 假设 res 直接是 blob 数据
      const downloadUrl = window.URL.createObjectURL(blob);
      const a = document.createElement("a");
      a.href = downloadUrl;
      // 使用 file.name 作为文件名，如果不存在则尝试从 URL 提取或使用默认名
      a.download = file.name || relativePath.split("/").pop() || "download";
      document.body.appendChild(a);
      a.click();
      a.remove(); // 下载后移除 a 标签
      window.URL.revokeObjectURL(downloadUrl); // 释放 blob URL
    } catch (error) {
      console.error("下载文件失败:", error);
      // 可以给用户一个下载失败的提示
    }
  };

  return (
    <ProFormUploadButton
      {...props}
      action={uploadUrl}
      fieldProps={{
        maxCount: 1,
        name: "file",
        headers: { Authorization: `${token}` },
        onPreview: fileClick, // 将 fileClick 函数传递给 onPreview
        ...(props.fieldProps || {}),
      }}
    />
  );
};

export default MyProFormUpload;
